﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Negocio = PSE.Tools.CadastroMensagens.Negocio;
using Entidades = PSE.Tools.CadastroMensagens.Entidades;
using Apresentacao = PSE.Tools.CadastroMensagens.Apresentacao;
using PSE.Tools.Util.Entidades;
namespace Web.Paginas
{
    public partial class TiposMensagens : Base.PaginaBase, Apresentacao.IApresentacao
    {
        #region [ Variaveis ]
        private Apresentacao.TiposMensagem _mensagemTiposMensagem;
        #endregion [ Variaveis ]

        #region [ Construtores ]
        public TiposMensagens()
        {
            _mensagemTiposMensagem = new Apresentacao.TiposMensagem(this, new Negocio.TiposMensagens());
        }
        #endregion [ Construtores ]

        #region [ Eventos ]
        protected override void OnLoad(EventArgs e)
        {
            lnkNovo.Click += new EventHandler(lnkNovo_Click);
            lnkCancelar.Click += new EventHandler(lnkCancelar_Click);

            btnInserir.Click += new ImageClickEventHandler(btnInserir_Click);
            grid.ItemCommand +=new RepeaterCommandEventHandler(grid_ItemCommand);
            if (!IsPostBack)
            {
                IniciaGrid();
            }
        }

        protected void grid_ItemCommand(object source, RepeaterCommandEventArgs e)
        {
            int id = 0;
            int.TryParse(e.CommandArgument.ToString(), out id);
            if (e.CommandName.Equals("Editar"))
            {
                Carregar(id);
            }
            if (e.CommandName.Equals("Excluir"))
            {
                Excluir(id);
            }
        }

        protected void btnInserir_Click(object sender, ImageClickEventArgs e)
        {
            Salvar();
        }

        protected void lnkNovo_Click(object sender, EventArgs e)
        {
            Novo();
        }

        protected void lnkCancelar_Click(object sender, EventArgs e)
        {
            Cancelar();
        }
        #endregion [ Eventos ]

        #region [ Métodos ]
        private void Salvar()
        {
            bool retorno = false;
            Entidades.TipoMensagem TipoMensagem = new Entidades.TipoMensagem();

            int id = 0;
            int.TryParse(txtId.Value, out id);
            TipoMensagem.Id = id;
            TipoMensagem.Descricao = txtDescricao.Text;

            if (string.IsNullOrEmpty(txtId.Value))
                retorno = _mensagemTiposMensagem.Inserir(TipoMensagem);
            else
                retorno = _mensagemTiposMensagem.Atualizar(TipoMensagem);

            if (retorno)
                IniciaGrid();

            form.Visible = !retorno;
        }

        private void Excluir(int id)
        {
            Entidades.TipoMensagem tipo = _mensagemTiposMensagem.Obter(id);
            _mensagemTiposMensagem.Excluir(tipo);
            IniciaGrid();
        }

        private void Carregar(int id)
        {
            Novo();
            Entidades.TipoMensagem tipo = _mensagemTiposMensagem.Obter(id);
            txtId.Value = tipo.Id.ToString();
            txtDescricao.Text = tipo.Descricao;
        }

        private void LimparCampos()
        {
            txtId.Value = string.Empty;
            txtDescricao.Text = string.Empty;
        }

        private void Novo()
        {
            LimparCampos();
            form.Visible = true;
            txtDescricao.Text = string.Empty;
            lblMensagem.Text = string.Empty;
        }

        private void Cancelar()
        {
            LimparCampos();
            form.Visible = false;
            lblMensagem.Text = "";
        }

        private void IniciaGrid()
        {
            var itens = _mensagemTiposMensagem.Lista();
            grid.DataSource = itens;
            grid.DataBind();
            lblQtdItens.Text = itens.Count.ToString();
        }

        public void EnviarMensagem(string mensagem)
        {
            lblMensagem.Text = mensagem;
            lblMensagem.CssClass = "fraseDestaque sucesso";
        }

        public void EnviarMensagemErro(string mensagem)
        {
            lblMensagem.Text = mensagem;
            lblMensagem.CssClass = "fraseDestaque erro";
        }

        public void EnviarMensagemValidacao(IEnumerable<ValidacaoEntidade> validacoes)
        {
            foreach (var validacao in validacoes)
                EnviarMensagemValidacao(validacao);
        }

        public void EnviarMensagemValidacao(ValidacaoEntidade validacao)
        {
            if (validacao.NomePropriedade == "Descricao")
            {
                lblDescricao.CssClass = "atencao";
                lblDescricao.Text = validacao.Mensagem;
            }

            lblMensagem.CssClass = "fraseDestaque atencao";
            lblMensagem.Text = "Verifique os campos abaixo...";
        }
        #endregion [ Métodos ]
    }
}
